#!/usr/bin/python
# -*- coding: utf-8 -*-
#file_op.py
#version 0.1  edited by lingyue.wkl 2011-10-1 11:52:11

#this script is userd to operate the file




from elementtree import ElementTree
from elementtree.ElementTree import Element
 
##解析方案一: 解析XML字符串,入参是字符串
fp = open('test.xml', 'r')
content = fp.read()
fp.close()
 
content = content.decode('gb2312').encode('UTF-8')
content = content.replace('encoding="gb2312"', 'encoding="UTF-8"')
print content
 
root = ElementTree.fromstring(content)
 
##解析方案二: 解析一个XML文件,入参是文件名
import elementtree.ElementTree as ET
root = ET.Element("html")
 
##获取节点
##获取同名节点列表
root.findall('NodeName') ##这是第一层节点
root.findall('/NodeName/SubNode') ##也可以写路径来获取底下几层的节点
##也可以这么获取多层的节点
ElementTree.Element = root.findall('NodeName')
ElementTree.Element[0].findall('SubNode')
##获取后的节点可以用个iter来保存,也可以直接就用 ElementTree.Element来获取
 
 
##获取单个节点,如果有同名的返回第一个节点
root.find('NodeName') ##这是第一层节点
root.find('/NodeName/SubNode') ##也可以写路径来获取底下几层的节点
##也可以这么获取多层的节点
ElementTree.Element = root.find('NodeName')
ElementTree.Element.find('SubNode')
 
 
##获得和修改属性
##根节点
print root.get("Name")
root.set("Name", "aaaa")##修改根节点中名为Name的属性值为"aaaa"
print root.get("Name")
 
##子节点
ElementTree.Element = root.findall('node')
print ElementTree.Element[2].get("name")
ElementTree.Element[2].set("name","kkk")
print ElementTree.Element[2].get("name")
 
 
##写XML
##将root存储为XML字符串,这是写XML的方法之一，前提是得先由一个XML解析出root
print ElementTree.tostring(root, encoding='gb2312')
 
##写XML方法之二，构造XML，从空白开始
from elementtree.SimpleXMLWriter import XMLWriter
import sys
##XMLWriter(file,encoding='')参数是:文件名,文件编码类型
w = XMLWriter("TEST.XML",, encoding='gb2312')
w.declaration(encoding='gb2312') ##添加XML头，即<?xml version="1.0" encoding="gb2312"?>
xmlstr = w.start("html") ##这边的变量不能定义为 xml
w.start("head") ##根节点 <head>
w.element("title", "my document")
w.element("meta", name="generator", value="my application 1.0") ##这是个有属性的节点，生成之后为<meta name=name="generator" value="my application 1.0">
w.end() ##一段节点的结束，下一个w.start()追加的是和本次w.start()同级的节点
w.start("body")
w.element("h1", "this is a heading")
w.element("p", "this is a paragraph")
w.start("p")
w.data("this is ")
w.element("b", "bold")
w.data(" and ")
w.element("i", "italic")
w.data(".")
w.end("p")
w.close(xmlstr)
 
##以上是将生成的XML写到文件中，如果是想写到一个字符串中则需要使用以下代码
from cStringIO import StringIO
out = StringIO()
w = XMLWriter(out, encoding='gb2312')
##……中间相同
w.close(xmlstr)
ss = out.getvalue() ##用这句来获得整个XML字符串